﻿/*************************************************************************************

- CLR版本：        4.0.30319.42000
- 类 名 称：       BcFactory
- 机器名称：       YTE
- 命名空间：       LD.BC
- 文 件 名：       BcFactory
- 创建时间：       2022/6/11 15:06:10
- 作    者：       YTE
- 说   明：
- 修改时间：
- 修 改 人：
  *************************************************************************************/

using LD.Host;
using LdCommunication.Profinet.AllenBradley;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;

namespace LD.BC
{
    public class BcFactory
    {
        private string filePath = Path.Combine(Appbus.BasePath, "Config\\bc.config");
        #region 实例化板卡
        public IBoardCard Control;
        private static BcFactory instance;
        private static object _locker = new object();
        public static BcFactory Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (_locker)
                    {
                        if (instance == null)
                        {
                            instance = new BcFactory();
                        }
                    }
                }
                return instance;
            }
        }
        #endregion
        #region 板卡参数
        public TB_BC Config
        {
            get;
            set;
        }
        public void Save()
        {
            JsonSerializeHelper.Save(Config, filePath);
        }
        #endregion

        #region 起保停
        public 起保停 StartStop { get; set; } = new 起保停();
        public bool IsMonitoring { get; set; } = false;
        #endregion

        #region 数据处理

        internal void RunState(RunEnum run)
        {
        }
        public void Load()
        {
            try
            {
                //获取参数
                Config = JsonSerializeHelper.Load<TB_BC>(filePath);
                if (Config == null)
                {
                    Config = new TB_BC();
                }
                //指定品牌
                Control = new BcBrand().GetBcInstance(Config.ClassName);
                //安全门默认启动
                var _door = Config.IoList.Where(p => p.IoType == 0 && p.FixType == RunEnum.安全门.ToString()).ToList();
                foreach (var item in _door)
                {
                    Cache.SetCache(item.Name, true);
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        public StateEnum RunModel { get; set; } = StateEnum.手动模式;
        /// <summary>
        /// 设置输出IO
        /// </summary>
        /// <param name="name">IO名称(模糊查询)</param>
        /// <param name="on_off">True:低电平,False:高电平</param>
        public void SetOut(string name, bool on_off)
        {
            var light = Instance.Config.IoList
              .Where(p => p.IoType == (int)IoType.输出 && p.Name.Contains(name))
              .FirstOrDefault();
            if (light != null)
            {
                if (on_off)
                    Control.SetOut((ushort)light.No, (int)LevelType.低电平);
                else
                    Control.SetOut((ushort)light.No, (int)LevelType.高电平);
            }
        }
        #endregion
    }
}

